package aedustuff;

import java.util.ArrayList;

/**
 * Diese Klasse definiert einer von den 4 Stapeln, die auf dem Spielfeld in der
 * Mitte sind. Einer dieser Stapel kann nur 3 Karten beinhalten. In der
 * Mainklasse, oder im GUI können also 4 dieser CardDecks instanziert werden.
 * (könnten natürlich auch mehr sein)
 *
 * @author Adrian Hostettler
 */
public class GameFieldCardDeck implements ICardDeck{

    ArrayList<Card> fieldCardDeck;

    /**
     * Konstruktor initialisiert das CardDeckFeld mit einer ArrayList, die 3
     * Karten aufnehmen kann.
     */
    public GameFieldCardDeck() {
        fieldCardDeck = new ArrayList<Card>(3);
    }

    /**
     * Überprüft, ob das Deck voll ist.
     *
     * @return voll oder nicht.
     */
    public boolean isFull() {
        if (fieldCardDeck.size() == 3) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Überprüft, ob das Deck leer ist.
     *
     * @return leer oder nicht.
     */
    public boolean isEmpty() {
        if (fieldCardDeck.isEmpty()) {
            return true;
        } else {
            return false;
        }
    }
    
    public int cardCount(){
        return fieldCardDeck.size();
    }

    /**
     * Leert das Deck, und gibt die Karten zurück.
     *
     * @return Alle Karten von diesem Deck.
     */
    public ArrayList<Card> getCards() {
        ArrayList<Card> temp;
        temp = fieldCardDeck;
        fieldCardDeck.clear();
        return temp;
    }

    /**
     * Fügt eine Karte vom Hauptstapel hinzu, wenn das Deck nicht schon voll
     * ist.
     *
     * @param cardDeck von dem die Karte hinzugefügt wird.
     * @return Hinzufügen erfolgreich, oder nicht.
     */
    public boolean addCardFrom(MainCardDeck cardDeck) {
        if (this.isFull()) {
            return false;
        } else {
            fieldCardDeck.add(cardDeck.drawCard());
            return true;
        }
    }

    /**
     * Überschreibe die toString Funktion, die jedes Objekt hat, damit das
     * Kartendeck in der Konsole angeschaut werden kann. Ist für das Projekt
     * nicht relevant.
     *
     * @return Kartendeck als String. |Farbe, Kartennummer vom ursprünglichen
     * Deck|
     */
    @Override
    public String toString() {
        String string = "FieldCardDeck: ";
        if (fieldCardDeck.isEmpty()) {
            string += "is empty";
        } else {
            for (Card card : fieldCardDeck) {
                string += "\t| " + card.number + " " + card.color.name() + " |";
            }
        }
        string += "\n\n";
        return string;
    }
}
